package tests;


import static org.junit.Assert.assertTrue;

import java.math.BigDecimal;
import java.util.Date;

import org.junit.Before;
import org.junit.Test;

import usuario.TipoUsuarioGratuito;
import usuario.TipoUsuarioVip;
import vuelo.VueloDirecto;
import asiento.Asiento;
import busqueda.Busqueda;
import claseAsiento.Ejecutiva;
import claseAsiento.PrimeraClase;
import filtro.FiltroPorSuperOfertas;

public class FiltroPorSuperOfertasTest {
	
	FiltroPorSuperOfertas filtro;
	VueloDirecto vuelo;
	Busqueda busqueda;
	Busqueda busquedaVip;
	Asiento asiento;
	Asiento otroAsiento;
	Asiento diferenteAsiento;
	
	@Before
	public void setUp() throws Exception {
		asiento = new Asiento();
		asiento.setClaseAsiento(new PrimeraClase());
		asiento.setPrecio(new BigDecimal("6000"));
		asiento.setFechaLlegada(new Date());
		asiento.setFechaSalida(new Date());
		
		
		otroAsiento = new Asiento();
		otroAsiento.setClaseAsiento(new Ejecutiva());
		otroAsiento.setPrecio(new BigDecimal("3000"));
		
		
		diferenteAsiento = new Asiento();
		diferenteAsiento.setClaseAsiento(new Ejecutiva());
		diferenteAsiento.setPrecio(new BigDecimal("9000"));
		
		
		vuelo = new VueloDirecto("ECO344", asiento);
		vuelo.addAsiento(asiento);
		
		busqueda = new Busqueda("Arg", "Bra", "date");
		busqueda.setTipoUsuario(new TipoUsuarioGratuito());
		
		busquedaVip = new Busqueda("Arg", "Bra", "date");
		busquedaVip.setTipoUsuario(new TipoUsuarioVip());
		
		filtro = new FiltroPorSuperOfertas();
	}

	@Test
	public void vueloConUnAsientoQueEsSuperOfertaUsuarioNoVip(){
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 0);
	}
	
	@Test
	public void vueloConDosAsientosQueSonSuperOfertaUsuarioNoVip(){
		vuelo.addAsiento(otroAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 0);
	}
	
	@Test
	public void vueloConDosAsientosUnoEsSonSuperOfertaUsuarioNoVip(){
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 1);
	}
	
	@Test
	public void vueloConUnAsientoQueNoEsSuperOfertaUsuarioNoVip(){
		vuelo.getAsientos().clear();
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 1);
	}
	
	@Test
	public void vueloConTresAsientosParaVip(){
		vuelo.addAsiento(otroAsiento);
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busquedaVip);
		assertTrue(vuelo.getAsientos().size() == 3);
	}
	
	@Test
	public void vueloConDosAsientosParaVip(){
		vuelo.addAsiento(otroAsiento);
		filtro.filtrarVueloDirecto(vuelo, busquedaVip);
		assertTrue(vuelo.getAsientos().size() == 2);
	}
	
	@Test
	public void vueloConOtrosDosAsientosParaVip(){
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busquedaVip);
		assertTrue(vuelo.getAsientos().size() == 2);
	}
	
	@Test
	public void vueloConDiferentesDosAsientosParaVip(){
		vuelo.getAsientos().clear();
		vuelo.addAsiento(otroAsiento);
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busquedaVip);
		assertTrue(vuelo.getAsientos().size() == 2);
	}
}
